package modelo.diagrama.de.classes;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import modelo.diagramas.ElementoDeLigacao;
import modelo.diagramas.ElementoDeModelo;
import modelo.diagramas.ObjetoBase;

public class Composicao extends ElementoDeLigacao {


	public Composicao( ElementoDeModelo origem,
			ElementoDeModelo destino, Color corObjeto, Color corAtributo,
			Color corContorno, int espessuraLinha , String rotuloRelacionamento) {
		super(origem, destino, Color.BLACK, espessuraLinha, rotuloRelacionamento);
	}

	@Override
	public void pinta(Graphics g) {

		g.setColor(getCorContorno());

		int tmpX[] = new int[4];
		int tmpY[] = new int[4];

		for (int i = 0; i < this.getEspessuraLinha(); i++) {

			if (this.getOrientacao().equals(ORIENTACAO_BAIXO_DIREITA)) {

				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura()), (this.getOrigem().getY() + this
						.getOrigem().getAltura() / 2) + i, (this.getDestino()
						.getX() + this.getDestino().getLargura() / 2), (this
						.getOrigem().getY() + this.getOrigem().getAltura() / 2)
						+ i);
				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + i, this.getOrigem().getY()
						+ this.getOrigem().getAltura() / 2, this.getDestino()
						.getX() + this.getDestino().getLargura() / 2 + i, this
						.getDestino().getY());

				tmpX[0] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2);
				tmpY[0] = this.getDestino().getY() - 40;

				tmpX[1] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + 20;
				tmpY[1] = this.getDestino().getY() - 20;

				tmpX[2] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2);
				tmpY[2] = this.getDestino().getY();

				tmpX[3] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) - 20;
				tmpY[3] = this.getDestino().getY() - 20;

			} else if (this.getOrientacao().equals(ORIENTACAO_CIMA_DIREITA)) {

				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura()), (this.getOrigem().getY() + this
						.getOrigem().getAltura() / 2) + i, (this.getDestino()
						.getX() + this.getDestino().getLargura() / 2), (this
						.getOrigem().getY() + this.getOrigem().getAltura() / 2)
						+ i);
				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + i, this.getOrigem().getY()
						+ this.getOrigem().getAltura() / 2, this.getDestino()
						.getX() + this.getDestino().getLargura() / 2 + i, this
						.getDestino().getY() + this.getDestino().getAltura());

				tmpX[0] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2);
				tmpY[0] = this.getDestino().getY()
						+ this.getDestino().getAltura() + 40;

				tmpX[1] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) + 20;
				tmpY[1] = this.getDestino().getY()
						+ this.getDestino().getAltura() + 20;

				tmpX[2] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2);
				tmpY[2] = this.getDestino().getY()
						+ this.getDestino().getAltura();

				tmpX[3] = (this.getDestino().getX() + this.getDestino()
						.getLargura() / 2) - 20;
				tmpY[3] = this.getDestino().getY()
						+ this.getDestino().getAltura() + 20;

			} else if (this.getOrientacao().equals(ORIENTACAO_BAIXO_ESQUERDA)) {

				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura()), (this.getDestino().getY() + this
						.getDestino().getAltura() / 2) + i, (this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2),
						(this.getDestino().getY() + this.getDestino()
								.getAltura() / 2) + i);
				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura() / 2) + i, this.getDestino().getY()
						+ this.getDestino().getAltura() / 2, this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2 + i, this
						.getOrigem().getY() + this.getOrigem().getAltura());

				tmpX[0] = (this.getDestino().getX() + this.getDestino()
						.getLargura());
				tmpY[0] = (this.getDestino().getY() + this.getDestino()
						.getAltura() / 2);

				tmpX[1] = (this.getDestino().getX() + this.getDestino()
						.getLargura()) + 20;
				tmpY[1] = ((this.getDestino().getY() + this.getDestino()
						.getAltura() / 2)) - 20;

				tmpX[2] = (this.getDestino().getX() + this.getDestino()
						.getLargura()) + 40;
				tmpY[2] = (this.getDestino().getY() + this.getDestino()
						.getAltura() / 2);

				tmpX[3] = (this.getDestino().getX() + this.getDestino()
						.getLargura()) + 20;
				tmpY[3] = ((this.getDestino().getY() + this.getDestino()
						.getAltura() / 2)) + 20;

			} else if (this.getOrientacao().equals(ORIENTACAO_CIMA_ESQUERDA)) {

				g.drawLine((this.getDestino().getX() + this.getDestino()
						.getLargura()), (this.getDestino().getY() + this
						.getDestino().getAltura() / 2) + i, (this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2),
						(this.getDestino().getY() + this.getDestino()
								.getAltura() / 2) + i);
				g.drawLine((this.getOrigem().getX() + this.getOrigem()
						.getLargura() / 2) + i, this.getDestino().getY()
						+ this.getDestino().getAltura() / 2, this.getOrigem()
						.getX() + this.getOrigem().getLargura() / 2 + i, this
						.getOrigem().getY());

				tmpX[0] = (this.getDestino().getX() + this.getDestino().getLargura());
				tmpY[0] = (this.getDestino().getY()+this.getDestino().getAltura()/2) ;

				tmpX[1] = (this.getDestino().getX() + this.getDestino().getLargura() )+20;
				tmpY[1] = ((this.getDestino().getY()+this.getDestino().getAltura()/2)) -20;

				tmpX[2] =  (this.getDestino().getX() + this.getDestino().getLargura() )+40;
				tmpY[2] =  (this.getDestino().getY()+this.getDestino().getAltura()/2);

				tmpX[3] = (this.getDestino().getX() + this.getDestino().getLargura())+20;
				tmpY[3] =  ((this.getDestino().getY()+this.getDestino().getAltura()/2)) +20;
				
			}
		}

		g.fillPolygon(tmpX, tmpY, 4);
		g.drawPolygon(tmpX, tmpY, 4);
	}


}
